﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using Noris.Tools.TraceVisualiser.Interface;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Components;

namespace Noris.Tools.TraceVisualiser.TraceData
{
    // TraceColors : barvy pro zobrazování, konfigurace barevnosti
    /// <summary>
    /// TraceColors : barvy pro zobrazování
    /// </summary>
    public class TraceColors : IInitialize
    {
        public TraceColors()
        {
            this.ColorList = new ColorList();
            this.ColorList.ConfigFile = System.IO.Path.Combine(Steward.UserAppDataPath, "Lcs.TraceVisualiserColors.config");
            this.ColorList.DefaultItemColor = Color.PaleTurquoise;
            this._PrepareColors();
            this.ColorList.ColorChanged += new EventHandler(ColorList_ColorChanged);
        }
		/// <summary>
		/// Vnitřní data s barvami
		/// </summary>
		public ColorList ColorList { get; private set; }
        #region Barvy dle názvu skupiny a čísla objektu
        /// <summary>
        /// Vrátí barvu objektu dané skupiny a daného čísla.
        /// Skupina = například "server", "cowley", "instance".
        /// V jedné skupině může být víc než jedna barva, pak se konkrétní barva určí podle čísla objektu.
        /// </summary>
        /// <param name="colorGroup"></param>
        /// <param name="objectId"></param>
        /// <returns></returns>
		internal Color GetColor(string colorGroup, int objectId)
		{
			return this.ColorList.GetColor(colorGroup, objectId, true);
		}
        #endregion
		#region Podpora vizuální editace
		/// <summary>
		/// Obsahuje (get vytvoří, a set akceptuje) kopii datového objektu ColorList, 
		/// který slouží jako datová vrstva pro vizuální editaci.
        /// Po každém vložení objektu se inkrementuje this.ColorListGeneration.
		/// </summary>
		public Components.ColorList ColorListClone
		{
			get { return this.ColorList.Clone; }
            set { this.ColorList.Clone = value; this.ColorListGeneration++; }
		}
        /// <summary>
        /// Pořadové číslo barevné sady, inkrementuje se vždy po změně (změna = vložení nového ColorListu do this.ColorListClone)
        /// </summary>
        public int ColorListGeneration { get; private set; }
        /// <summary>
        /// Po změně barev v editoru
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ColorList_ColorChanged(object sender, EventArgs e)
        {
            this.ColorListGeneration++;
        }
        #endregion
        #region IInitialize Members
        /// <summary>
        /// Inicializace objektu: připraví defaultní barvy / načte do sebe barvy z odpovídajícího XML objektu
        /// </summary>
        void IInitialize.Initialize()
        {
            // this._PrepareColors();
        }
        /// <summary>
        /// Připraví si barvy
        /// </summary>
        private void _PrepareColors()
        {
            this.ColorList.PrepareColors();
            this.ColorListGeneration = 1;
        }
        #endregion
    }
}
